package org.example.FakeAIO_01;

import org.example.BIO_03.SocketHandler;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ThreadPoolExecutor;

/**
 * 伪异步NIO：服务端每接收到一个请求，交给线程池处理，解决线程溢出的问题
 *
 * - 线程池实现，避免了每个请求都创建一个线程，造成线程资源耗尽的问题，但是底部的通信方式仍然是BIO，并没有从根本上解决问题
 * - 若单个消息处理缓慢，或者全部线程都被阻塞，后续的socket连接都会排队，大量连接超时
 */
public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(9999);
        ExecutePool pool = new ExecutePool(1, 3, 3);
        while (true) {
            Socket socket = ss.accept();
            pool.execute(new Task(socket));
        }
    }
}
